home *** CD-ROM | disk | FTP | other *** search
Text File | 1993-03-03 | 124.2 KB | 3,072 lines |
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- John Linn
- Networking and Communications Architecture
- Digital Equipment Corporation
- 550 King Street, LKG1-2/A19
- Littleton, MA 01460
- Linn@erlang.enet.dec.com
-
- STATUS OF THIS MEMO
-
- This document is an Internet Draft. Internet Drafts are working
- documents of the Internet Engineering Task Force (IETF), its
- Areas, and its Working Groups. Note that other groups may also
- distribute working documents as Internet Drafts.
-
- Internet Drafts are draft documents valid for a maximum of six
- months. Internet Drafts may be updated, replaced, or obsoleted
- by other documents at any time. It is not appropriate to use
- Internet Drafts as reference material or to cite them other than
- as a "working draft" or "work in progress."
-
- Please check the I-D abstract listing contained in each Internet
- Draft directory to learn the current status of this or any other
- Internet Draft.
-
- Comments on this document should be sent to "cat-ietf@mit.edu",
- the IETF Common Authentication Technology WG discussion list.
-
- 1 GSS-API Characteristics and Concepts
-
- This Generic Security Service Application Program Interface
- (GSS-API) definition provides security services to callers
- in a generic fashion, supportable with a range of underlying
- mechanisms and technologies and hence allowing source-level
- portability of applications to different environments. This
- specification defines GSS-API services and primitives at a level
- independent of underlying mechanism and programming language
- environment, and is to be complemented by other, related speci-
- fications:
-
- Document Expiration: 31 May 1993 1
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o documents defining specific parameter bindings for particular
- language environments
-
- o documents defining token formats, protocols, and procedures
- to be implemented in order to realize GSS-API services atop
- particular security mechanisms
-
-
- The operational paradigm in which GSS-API operates (also sum-
- marized in Figure 1 in the graphic version of this document)
- is as follows. A typical GSS-API caller is itself a communi-
- cations protocol, calling on GSS-API in order to protect its
- communications with authentication, integrity, and/or confi-
- dentiality security services. A GSS-API caller accepts tokens
- provided to it by its local GSS-API implementation and trans-
- fers the tokens to a peer on a remote system; that peer passes
- the received tokens to its local GSS-API implementation for
- processing. The security services available through GSS-API
- in this fashion are implementable (and have been implemented)
- over a range of underlying mechanisms based on secret-key and
- public-key cryptographic technologies.
-
- The GSS-API separates the operations of initializing a security
- context between peers, achieving peer entity authentication[1]
- (GSS_Init_sec_context() and GSS_Accept_sec_context() calls),
- from the operations of providing per-message data origin au-
- thentication and data integrity protection (GSS_Sign() and GSS_
- Verify() calls) for messages subsequently transferred in con-
- junction with that context. Per-message GSS_Seal() and GSS_
- Unseal() calls provide the data origin authentication and data
- integrity services which GSS_Sign() and GSS_Verify() offer, and
- also support selection of confidentiality services as a caller
-
-
- ___________________
- [1] This security service definition, and other definitions used
- in this document, corresponds to that provided in Interna-
- tional Standard ISO 7498-2-1988(E), Security Architecture.
-
-
- 2 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- option. Additional calls provide supportive functions to the
- GSS-API's users.
-
- In the graphic version of this document, Figure 2 illustrates
- the dataflows involved in use of the GSS-API by a client and
- server in a mechanism-independent fashion, establishing a secu-
- rity context and transferring a protected message. The example
- assumes that credential acquisition has already been completed.
- Only a subset of parameter and result values are illustrated,
- for reasons of clarity in exposition. Further, it is assumed
- that the underlying authentication technology is capable of au-
- thenticating a client to a server using elements carried within
- a single token, and of authenticating the server to the client
- (mutual authentication) with a single returned token; this as-
- sumption holds for presently-documented CAT mechanisms but is
- not necessarily true for other cryptographic technologies and
- associated protocols.
-
- The client calls GSS_Init_sec_context() to establish a security
- context to the server identified by targ_name, and elects to
- set the mutual_req_flag so that mutual authentication is per-
- formed in the course of context establishment. GSS_Init_sec_
- context() returns an output_token to be passed to the server,
- and indicates GSS_CONTINUE_NEEDED status pending completion of
- the mutual authentication sequence. Had mutual_req_flag not been
- set, the initial call to GSS_Init_sec_context() would have re-
- turned GSS_COMPLETE status. The client sends the output_token to
- the server.
-
- The server passes the received token as the input_token pa-
- rameter to GSS_Accept_sec_context(). GSS_Accept_sec_context
- indicates GSS_COMPLETE status, provides the client's authenti-
- cated identity in the src_name result, and provides an output_
- token to be passed to the client. The server sends the output_
- token to the client.
-
-
-
-
- Document Expiration: 31 May 1993 3
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- The client passes the received token as the input_token pa-
- rameter to a successor call to GSS_Init_sec_context(), which
- processes data included in the token in order to achieve mu-
- tual authentication from the client's viewpoint. This call to
- GSS_Init_sec_context() returns GSS_COMPLETE status, indicating
- successful mutual authentication and the completion of context
- establishment for this example.
-
- The client generates a data message and passes it to GSS_
- Seal(). GSS_Seal() performs data origin authentication, data
- integrity, and (optionally) confidentiality processing on the
- message and encapsulates the result into output_message, indi-
- cating GSS_COMPLETE status. The client sends the output_message
- to the server.
-
- The server passes the received message to GSS_Unseal(). GSS_
- Unseal inverts the encapsulation performed by GSS_Seal(), de-
- ciphers the message if the optional confidentiality feature was
- applied, and validates the data origin authentication and data
- integrity checking quantities. GSS_Unseal() indicates success-
- ful validation by returning GSS_COMPLETE status along with the
- resultant output_message.
-
- For purposes of this example, we assume that the server knows
- by out-of-band means that this context will have no further
- use after one protected message is transferred from client to
- server. Given this premise, the server now calls GSS_Delete_sec_
- context() to flush context-level information. GSS_Delete_sec_
- context returns a context_token for the server to pass to the
- client.
-
- The client passes the returned context_token to GSS_Process_
- context_token(), which returns GSS_COMPLETE status after delet-
- ing context-level information at the client system.
-
- The GSS-API design assumes and addresses several basic goals,
- including:
-
- o Mechanism independence: The GSS-API defines an interface
- to cryptographically implemented strong authentication and
-
- 4 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- other security services at a generic level which is inde-
- pendent of particular underlying mechanisms. For example,
- GSS-API-provided services can be implemented by secret-key
- technologies (e.g., Kerberos) or public-key approaches (e.g.,
- X.509).
-
- o Protocol environment independence: The GSS-API is indepen-
- dent of the communications protocol suites with which it is
- employed, permitting use in a broad range of protocol en-
- vironments. In appropriate environments, an intermediate
- implementation "veneer" which is oriented to a particular
- communication protocol (e.g., Remote Procedure Call (RPC))
- may be interposed between applications which call that proto-
- col and the GSS-API, thereby invoking GSS-API facilities in
- conjunction with that protocol's communications invocations.
-
- o Protocol association independence: The GSS-API's security
- context construct is independent of communications protocol
- association constructs. This characteristic allows a single
- GSS-API implementation to be utilized by a variety of in-
- voking protocol modules on behalf of those modules' calling
- applications. GSS-API services can also be invoked directly
- by applications, wholly independent of protocol associations.
-
- o Suitability to a range of implementation placements: GSS-
- API clients are not constrained to reside within any Trusted
- Computing Base (TCB) perimeter defined on a system where the
- GSS-API is implemented; security services are specified in a
- manner suitable to both intra-TCB and extra-TCB callers.
-
- 1.1 GSS-API Constructs
-
- This section describes the basic elements comprising the GSS-
- API.
-
-
-
-
-
- Document Expiration: 31 May 1993 5
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 1.1.1 Credentials
-
- Credentials structures provide the prerequisites enabling peers
- to establish security contexts with each other. A caller may
- designate that its default credential be used for context es-
- tablishment calls without presenting an explicit handle to that
- credential. Alternately, those GSS-API callers which need to
- make explicit selection of particular credentials structures may
- make references to those credentials through GSS-API-provided
- credential handles ("cred_handles").
-
- A single credential structure may be used for initiation of
- outbound contexts and acceptance of inbound contexts. Callers
- needing to operate in only one of these modes may designate this
- fact when credentials are acquired for use, allowing underlying
- mechanisms to optimize their processing and storage require-
- ments. The credential elements defined by a particular mechanism
- may contain multiple cryptographic keys, e.g., to enable authen-
- tication and message encryption to be performed with different
- algorithms.
-
- A single credential structure may accommodate credential in-
- formation associated with multiple underlying mechanisms (mech_
- types); a credential structure's contents will vary depending
- on the set of mech_types supported by a particular GSS-API im-
- plementation. Commonly, a single mech_type will be used for all
- security contexts established by a particular initiator to a
- particular target; the primary motivation for supporting cre-
- dential sets representing multiple mech_types is to allow ini-
- tiators on systems which are equipped to handle multiple types
- to initiate contexts to targets on other systems which can ac-
- commodate only a subset of the set supported at the initiator's
- system.
-
- It is the responsibility of underlying system-specific mech-
- anisms and OS functions below the GSS-API to ensure that the
- ability to acquire and use credentials associated with a given
-
-
- 6 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- identity is constrained to appropriate processes within a sys-
- tem. This responsibility should be taken seriously by implemen-
- tors, as the ability for an entity to utilize a principal's cre-
- dentials is equivalent to the entity's ability to successfully
- assert that principal's identity.
-
- Once a set of GSS-API credentials is established, the transfer-
- ability of that credentials set to other processes or analogous
- constructs within a system is a local matter, not defined by the
- GSS-API. An example local policy would be one in which any cre-
- dentials received as a result of login to a given user account,
- or of delegation of rights to that account, are accessible by,
- or transferable to, processes running under that account.
-
- The credential establishment process (particularly when per-
- formed on behalf of users rather than server processes) is
- likely to require access to passwords or other quantities which
- should be protected locally and exposed for the shortest time
- possible. As a result, it will often be appropriate for pre-
- liminary credential establishment to be performed through local
- means at user login time, with the result(s) cached for sub-
- sequent reference. These preliminary credentials would be set
- aside (in a system-specific fashion) for subsequent use, either:
-
- o to be accessed by an invocation of the GSS-API GSS_Acquire_
- cred() call, returning an explicit handle to reference that
- credential
-
- o as the default credentials installed on behalf of a process
-
- 1.1.2 Tokens
-
- Tokens are data elements transferred between GSS-API callers,
- and are divided into two classes. Context-level tokens are ex-
- changed in order to establish and manage a security context
- between peers. Per-message tokens are exchanged in conjunction
- with an established context to provide protective security ser-
- vices for corresponding data messages. The internal contents of
- both classes of tokens are specific to the particular underlying
-
- Document Expiration: 31 May 1993 7
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- mechanism used to support the GSS-API; Appendix B of this docu-
- ment provides a uniform recommendation for designers of GSS-API
- support mechanisms, encapsulating mechanism-specific information
- along with a globally-interpretable mechanism identifier.
-
- Tokens are opaque from the viewpoint of GSS-API callers. They
- are generated within the GSS-API implementation at an end sys-
- tem, provided to a GSS-API caller to be transferred to the peer
- GSS-API caller at a remote end system, and processed by the
- GSS-API implementation at that remote end system. Tokens may
- be output by GSS-API primitives (and are to be transferred to
- GSS-API peers) independent of the status indications which those
- primitives indicate. Token transfer may take place in an in-band
- manner, integrated into the same protocol stream used by the
- GSS-API callers for other data transfers, or in an out-of-band
- manner across a logically separate channel.
-
- Development of GSS-API support primitives based on a partic-
- ular underlying cryptographic technique and protocol does not
- necessarily imply that GSS-API callers invoking that GSS-API
- mechanism type will be able to interoperate with peers invoking
- the same technique and protocol outside the GSS-API paradigm.
- For example, the format of GSS-API tokens defined in conjunc-
- tion with a particular mechanism, and the techniques used to
- integrate those tokens into callers' protocols, may not be the
- same as those used by non-GSS-API callers of the same underlying
- technique.
-
- 1.1.3 Security Contexts
-
- Security contexts are established between peers, using cre-
- dentials established locally in conjunction with each peer or
- received by peers via delegation. Multiple contexts may ex-
- ist simultaneously between a pair of peers, using the same or
- different sets of credentials. Coexistence of multiple con-
- texts using different credentials allows graceful rollover when
- credentials expire. Distinction among multiple contexts based
-
-
- 8 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- on the same credentials serves applications by distinguishing
- different message streams in a security sense.
-
- The GSS-API is independent of underlying protocols and address-
- ing structure, and depends on its callers to transport GSS-API-
- provided data elements. As a result of these factors, it is a
- caller responsibility to parse communicated messages, separat-
- ing GSS-API-related data elements from caller-provided data.
- The GSS-API is independent of connection vs. connectionless
- orientation of the underlying communications service.
-
- No correlation between security context and communications
- protocol association is dictated[ 2]. This separation allows
- the GSS-API to be used in a wide range of communications en-
- vironments, and also simplifies the calling sequences of the
- individual calls. In many cases (depending on underlying secu-
- rity protocol, associated mechanism, and availability of cached
- information), the state information required for context setup
- can be sent concurrently with initial signed user data, without
- interposing additional message exchanges.
-
- 1.1.4 Mechanism Types
-
- In order to successfully establish a security context with a
- target peer, it is necessary to identify an appropriate underly-
- ing mechanism type (mech_type) which both initiator and target
- peers support. The definition of a mechanism embodies not only
- the use of a particular cryptographic technology (or a hybrid or
- choice among alternative cryptographic technologies), but also
- definition of the syntax and semantics of data element exchanges
- which that mechanism will employ in order to support security
- services.
-
- ___________________
- [ 2] The optional channel binding facility, discussed in Sec-
- tion 1.1.6 of this document, represents an intentional excep-
- tion to this rule, supporting additional protection features
- within GSS-API supporting mechanisms.
-
-
- Document Expiration: 31 May 1993 9
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- It is recommended that callers initiating contexts specify the
- "default" mech_type value, allowing system-specific functions
- within or invoked by the GSS-API implementation to select the
- appropriate mech_type, but callers may direct that a particular
- mech_type be employed when necessary.
-
- The means for identifying a shared mech_type to establish a
- security context with a peer will vary in different environments
- and circumstances; examples include (but are not limited to):
-
- o use of a fixed mech_type, defined by configuration, within an
- environment
-
- o syntactic convention on a target-specific basis, through
- examination of a target's name
-
- o lookup of a target's name in a naming service or other
- database in order to identify mech_types supported by that
- target
-
- o explicit negotiation between GSS-API callers in advance of
- security context setup
-
- When transferred between GSS-API peers, mech_type specifiers
- (per Appendix B, represented as Object Identifiers [3](OIDs))
- serve to qualify the interpretation of associated tokens. Use
- of hierarchically structured OIDs serves to preclude ambiguous
- interpretation of mech_type specifiers. The OID representing the
- DASS MechType, for example, is 1.3.12.2.1011.7.5.
-
-
-
-
- ___________________
- [3] The structure and encoding of Object Identifiers is defined in
- ISO/IEC 8824, "Specification of Abstract Syntax Notation One
- (ASN.1)" and in ISO/IEC 8825, "Specification of Basic Encoding
- Rules for Abstract Syntax Notation One (ASN.1)".
-
-
- 10 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 1.1.5 Naming
-
- The GSS-API avoids prescription of naming structures, treating
- the names transferred across the interface in order to initiate
- and accept security contexts as opaque octet string quantities.
- This approach supports the GSS-API's goal of implementability
- atop a range of underlying security mechanisms, recognizing the
- fact that different mechanisms process and authenticate names
- which are presented in different forms. Generalized services
- offering translation functions among arbitrary sets of naming
- environments are outside the scope of the GSS-API; availability
- and use of local conversion functions to translate among the
- naming formats supported within a given end system is antici-
- pated.
-
- Two distinct classes of name representations are used in con-
- junction with different GSS-API parameters:
-
- o a printable form (denoted by OCTET STRING), for acceptance
- from and presentation to users; printable name forms are
- accompanied by OID tags identifying the namespace to which
- they correspond
-
- o an internal form (denoted by INTERNAL NAME), opaque to
- callers and defined by individual GSS-API implementations;
- GSS-API implementations supporting multiple namespace types
- are responsible for maintaining internal tags to disambiguate
- the interpretation of particular names
-
- Tagging of printable names allows GSS-API callers and underlying
- GSS-API mechanisms to disambiguate name types and to determine
- whether an associated name's type is one which they are capable
- of processing, avoiding aliasing problems which could result
- from misinterpreting a name of one type as a name of another
- type.
-
-
-
-
- Document Expiration: 31 May 1993 11
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- In addition to providing means for names to be tagged with
- types, this specification defines primitives to support a
- level of naming environment independence for certain calling
- applications. To provide basic services[4] oriented towards
- the requirements of callers which need not themselves interpret
- the internal syntax and semantics of names, GSS-API calls for
- name comparison (GSS_Compare_name()), human-readable display
- (GSS_Display_name()), input conversion (GSS_Import_name()), and
- internal name deallocation (GSS_Release_name()) functions are
- defined.
-
- GSS_Import_name() implementations can, where appropriate, sup-
- port more than one printable syntax corresponding to a given
- namespace (e.g., alternative printable representations for X.500
- Distinguished Names), allowing flexibility for their callers to
- select among alternative representations. GSS_Display_name()
- implementations output a printable syntax selected as appropri-
- ate to their operational environments; this selection is a local
- matter. Callers desiring portability across alternative print-
- able syntaxes should refrain from implementing comparisons based
- on printable name forms and should instead use the GSS_Compare_
- name() call to determine whether or not one internal-format
- name matches another.
-
-
-
-
-
-
-
- ___________________
- [4] It is anticipated that these proposed GSS-API calls will
- be implemented in many end systems based on system-specific
- name manipulation primitives already extant within those end
- systems; inclusion within the GSS-API is intended to offer
- GSS-API callers a portable means to perform specific opera-
- tions, supportive of authorization and audit requirements, on
- authenticated names.
-
-
- 12 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 1.1.6 Channel Bindings
-
- The GSS-API accommodates the concept of caller-provided channel
- binding ("chan_binding") information, used by GSS-API callers
- to bind the establishment of a security context to relevant
- characteristics (e.g., addresses, transformed representations of
- encryption keys) of the underlying communications channel and of
- protection mechanisms applied to that communications channel.
- Verification by one peer of chan_binding information provided by
- the other peer to a context serves to protect against various
- active attacks. The caller initiating a security context must
- determine the chan_binding values before making the GSS_Init_
- sec_context() call, and consistent values must be provided
- by both peers to a context. Callers should not assume that
- underlying mechanisms provide confidentiality protection for
- channel binding information.
-
- Use or non-use of the GSS-API channel binding facility is a
- caller option, and GSS-API supporting mechanisms can support
- operation in an environment where NULL channel bindings are
- presented. When non-NULL channel bindings are used, certain
- mechanisms will offer enhanced security value by interpreting
- the bindings' content (rather than simply representing those
- bindings, or signatures computed on them, within tokens) and
- will therefore depend on presentation of specific data in a
- defined format. To this end, agreements among mechanism im-
- plementors are defining[ 5] conventional interpretations for
- the contents of channel binding arguments, including address
- specifiers (with content dependent on communications protocol
- environment) for context initiators and acceptors. In order
- for GSS-API callers to be portable across multiple mechanisms
- and achieve the full security functionality available from each
- mechanism, it is strongly recommended that GSS-API callers pro-
- vide channel bindings consistent with these conventions and
- those of the networking environment in which they operate.
-
- ___________________
- [ 5] These conventions are being incorporated into related
- documents.
-
-
- Document Expiration: 31 May 1993 13
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 1.2 GSS-API Features and Issues
-
- This section describes aspects of GSS-API operations, of the
- security services which the GSS-API provides, and provides
- commentary on design issues.
-
- 1.2.1 Status Reporting
-
- Each GSS-API call provides two status return values. Major_
- status values provide a mechanism-independent indication of call
- status (e.g., GSS_COMPLETE, GSS_FAILURE, GSS_CONTINUE_NEEDED),
- sufficient to drive normal control flow within the caller in
- a generic fashion. Table 1 summarizes the defined major_status
- return codes in tabular fashion.
-
- ________________________________________________________________
-
- Table_1:__GSS-API_Major_Status_Codes____________________________
-
- FATAL ERROR CODES
-
- GSS_BAD_BINDINGS channel binding mismatch
-
- GSS_BAD_MECH unsupported mechanism requested
-
- GSS_BAD_NAME invalid name provided
-
- GSS_BAD_NAMETYPE name of unsupported type provided
-
- GSS_BAD_STATUS invalid input status selector
-
- GSS_BAD_SIG token had invalid signature
-
- GSS_CONTEXT_EXPIRED specified security context expired
-
- GSS_CREDENTIALS_EXPIRED expired credentials detected
-
-
-
- 14 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
- ________________________________________________________________
-
- Table_1_(Cont.):__GSS-API_Major_Status_Codes____________________
-
- GSS_DEFECTIVE_CREDENTIAL defective credential detected
-
- GSS_DEFECTIVE_TOKEN defective token detected
-
- GSS_FAILURE failure, unspecified at GSS-API
- level
-
- GSS_NO_CONTEXT no valid security context specified
-
- GSS_NO_CRED no valid credentials provided
-
- INFORMATORY STATUS CODES
-
- GSS_COMPLETE normal completion
-
- GSS_CONTINUE_NEEDED continuation call to routine re-
- quired
-
- GSS_DUPLICATE_TOKEN duplicate per-message token de-
- tected
-
- GSS_OLD_TOKEN timed-out per-message token de-
- tected
-
- GSS_UNSEQ_TOKEN out-of-order per-message token
- _____________________________detected___________________________
-
- Minor_status provides more detailed status information which may
- include status codes specific to the underlying security mecha-
- nism. Minor_status values are not specified in this document.
-
- GSS_CONTINUE_NEEDED major_status returns, and optional message
- outputs, are provided in GSS_Init_sec_context() and GSS_Accept_
- sec_context() calls so that different mechanisms' employment
- of different numbers of messages within their authentication
- sequences need not be reflected in separate code paths within
-
- Document Expiration: 31 May 1993 15
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- calling applications. Instead, such cases are accomodated with
- sequences of continuation calls to GSS_Init_sec_context() and
- GSS_Accept_sec_context(). The same mechanism is used to encap-
- sulate mutual authentication within the GSS-API's context initi-
- ation calls. In the graphic version of this document, Figure 3
- illustrates a GSS-API continuation scenario.
-
-
- For mech_types which require interactions with third-party
- servers in order to establish a security context, GSS-API con-
- text establishment calls may block pending completion of such
- third-party interactions. On the other hand, no GSS-API calls
- pend on serialized interactions with GSS-API peer entities.
- As a result, local GSS-API status returns cannot reflect un-
- predictable or asynchronous exceptions occurring at remote
- peers, and reflection of such status information is a caller
- responsibility outside the GSS-API.
-
- 1.2.2 Per-Message Security Service Availability
-
- When a context is established, two flags are returned to indi-
- cate the set of per-message protection security services which
- will be available on the context:
-
- o the integ_avail flag indicates whether per-message integrity
- and data origin authentication services are available
-
- o the conf_avail flag indicates whether per-message confiden-
- tiality services are available, and will never be returned
- TRUE unless the integ_avail flag is also returned TRUE
-
- GSS-API callers desiring per-message security services should
- check the values of these flags at context establishment time,
- and must be aware that a returned FALSE value for integ_avail
- means that invocation of GSS_Sign() or GSS_Seal() primitives on
- the associated context will apply no cryptographic protection to
- user data messages.
-
-
- 16 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- The GSS-API per-message protection service primitives, as the
- category name implies, are oriented to operation at the gran-
- ulatity of protocol data units. They perform cryptographic
- operations on the data units, transfer cryptographic control
- information in tokens, and, in the case of GSS_Seal(), encap-
- sulate the protected data unit. As such, these primitives are
- not oriented to efficient data protection for stream-paradigm
- protocols (e.g., Telnet) if cryptography must be applied on an
- octet-by-octet basis.
-
- 1.2.3 Per-Message Replay Detection and Sequencing
-
- Certain underlying mech_types are expected to offer support for
- replay detection and/or sequencing of messages transferred on
- the contexts they support. These optionally-selectable protec-
- tion features are distinct from replay detection and sequencing
- features applied to the context establishment operation itself;
- the presence or absence of context-level replay or sequencing
- features is wholly a function of the underlying mech_type's
- capabilities, and is not selected or omitted as a caller option.
-
- The caller initiating a context provides flags (replay_det_
- req_flag and sequence_req_flag) to specify whether the use of
- per-message replay detection and sequencing features is desired
- on the context being established. The GSS-API implementation
- at the initiator system can determine whether these features
- are supported (and whether they are optionally selectable) as a
- function of mech_type, without need for bilateral negotiation
- with the target. When enabled, these features provide recipients
- with indicators as a result of GSS-API processing of incoming
- messages, identifying whether those messages were detected as
- duplicates or out-of-sequence. Detection of such events does not
- prevent a suspect message from being provided to a recipient;
- the appropriate course of action on a suspect message is a
- matter of caller policy.
-
-
-
-
- Document Expiration: 31 May 1993 17
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- The semantics of the replay detection and sequencing services
- applied to received messages, as visible across the interface
- which the GSS-API provides to its clients, are as follows:
-
- When replay_det_state is TRUE, the possible major_status returns
- for well-formed and correctly signed messages are as follows:
-
- 1. GSS_COMPLETE indicates that the message was within the win-
- dow (of time or sequence space) allowing replay events to
- be detected, and that the message was not a replay of a
- previously-processed message within that window.
-
- 2. GSS_DUPLICATE_TOKEN indicates that the signature on the re-
- ceived message was correct, but that the message was recog-
- nized as a duplicate of a previously-processed message.
-
- 3. GSS_OLD_TOKEN indicates that the signature on the received
- message was correct, but that the message is too old to be
- checked for duplication.
-
- When sequence_state is TRUE, the possible major_status returns
- for well-formed and correctly signed messages are as follows:
-
- 1. GSS_COMPLETE indicates that the message was within the win-
- dow (of time or sequence space) allowing replay events to
- be detected, and that the message was not a replay of a
- previously-processed message within that window.
-
- 2. GSS_DUPLICATE_TOKEN indicates that the signature on the re-
- ceived message was correct, but that the message was recog-
- nized as a duplicate of a previously-processed message.
-
- 3. GSS_OLD_TOKEN indicates that the signature on the received
- message was correct, but that the token is too old to be
- checked for duplication.
-
-
-
-
- 18 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 4. GSS_UNSEQ_TOKEN indicates that the signature on the received
- message was correct, but that it is earlier in a sequenced
- stream [6] than a message already processed on the context.
-
- As the message stream integrity features (especially sequencing)
- may interfere with certain applications' intended communications
- paradigms, and since support for such features is likely to be
- resource intensive, it is highly recommended that mech_types
- supporting these features allow them to be activated selectively
- on initiator request when a context is established. A context
- initiator and target are provided with corresponding indicators
- (replay_det_state and sequence_state), signifying whether these
- features are active on a given context.
-
- An example mech_type supporting per-message replay detection
- could (when replay_det_state is TRUE) implement the feature as
- follows: The underlying mechanism would insert timestamps in
- data elements output by GSS_Sign() and GSS_Seal(), and would
- maintain (within a time-limited window) a cache (qualified by
- originator-recipient pair) identifying received data elements
- processed by GSS_Verify() and GSS_Unseal(). When this feature
- is active, exception status returns (GSS_DUPLICATE_TOKEN, GSS_
- OLD_TOKEN) will be provided when GSS_Verify() or GSS_Unseal()
- is presented with a message which is either a detected duplicate
-
- ___________________
- [6] Mechanisms can be architected to provide a stricter form of
- sequencing service, delivering particular messages to recipi-
- ents only after all predecessor messages in an ordered stream
- have been delivered. This type of support is incompatible
- with the GSS-API paradigm in which recipients receive all mes-
- sages, whether in order or not, and provide them (one at a
- time, without intra-GSS-API message buffering) to GSS-API rou-
- tines for validation. GSS-API facilities provide supportive
- functions, aiding clients to achieve strict message stream in-
- tegrity in an efficient manner in conjunction with sequencing
- provisions in communications protocols, but the GSS-API does
- not offer this level of message stream integrity service by
- itself.
-
-
- Document Expiration: 31 May 1993 19
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- of a prior message or which is too old to validate against a
- cache of recently received messages.
-
- 1.2.4 Quality of Protection
-
- Some mech_types will provide their users with fine granularity
- control over the means used to provide per-message protection,
- allowing callers to trade off security processing overhead dy-
- namically against the protection requirements of particular
- messages. A per-message quality-of-protection parameter (anal-
- ogous to quality-of-service, or QOS) selects among different
- QOP options supported by that mechanism. On context establish-
- ment for a multi-QOP mech_type, context-level data provides the
- prerequisite data for a range of protection qualities.
-
- It is expected that the majority of callers will not wish to
- exert explicit mechanism-specific QOP control and will therefore
- request selection of a default QOP. Definitions of, and choices
- among, non-default QOP values are mechanism-specific, and no
- ordered sequences of QOP values can be assumed equivalent across
- different mechanisms. Meaningful use of non-default QOP values
- demands that callers be familiar with the QOP definitions of
- an underlying mechanism or mechanisms, and is therefore a non-
- portable construct.
-
- 2 Interface Descriptions
-
- This section describes the GSS-API's service interface, dividing
- the set of calls offered into four groups. Credential management
- calls are related to the acquisition and release of credentials
- by principals. Context-level calls are related to the management
- of security contexts between principals. Per-message calls are
- related to the protection of individual messages on established
- security contexts. Support calls provide ancillary functions
- useful to GSS-API callers. Table 2 groups and summarizes the
- calls in tabular fashion.
-
-
-
- 20 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- ________________________________________________________________
-
- Table_2:__GSS-API_Calls_________________________________________
-
- CREDENTIAL MANAGEMENT
-
- GSS_Acquire_cred acquire credentials for use
-
- GSS_Release_cred release credentials after use
-
- GSS_Inquire_cred display information about creden-
- tials
-
- CONTEXT-LEVEL CALLS
-
- GSS_Init_sec_context initiate outbound security context
-
- GSS_Accept_sec_context accept inbound security context
-
- GSS_Delete_sec_context flush context when no longer needed
-
- GSS_Process_context_token process received control token on
- context
-
- GSS_Context_time indicate validity time remaining on
- context
-
- PER-MESSAGE CALLS
-
- GSS_Sign apply signature, receive as token
- separate from message
-
- GSS_Verify validate signature token along with
- message
-
- GSS_Seal sign, optionally encrypt, encapsu-
- late
-
-
- Document Expiration: 31 May 1993 21
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
- ________________________________________________________________
-
- Table_2_(Cont.):__GSS-API_Calls_________________________________
-
- GSS_Unseal decapsulate, decrypt if needed,
- validate signature
-
- SUPPORT CALLS
-
- GSS_Display_status translate status codes to printable
- form
-
- GSS_Indicate_mechs indicate mech_types supported on
- local system
-
- GSS_Compare_name compare two names for equality
-
- GSS_Display_name translate name to printable form
-
- GSS_Import_name convert printable name to normal-
- ized form
-
- GSS_Release_name free storage of normalized-form
- name
-
- GSS_Release_buffer free storage of printable name
-
- GSS_Release_oid_set__________free_storage_of_OID_set_object_____
-
-
- 2.1 Credential management calls
-
- These GSS-API calls provide functions related to the management
- of credentials. Their characterization with regard to whether or
- not they may block pending exchanges with other network entities
- (e.g., directories or authentication servers) depends in part on
- OS-specific (extra-GSS-API) issues, so is not specified in this
- document.
-
-
- 22 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- The GSS_Acquire_cred() call is defined within the GSS-API in
- support of application portability, with a particular orien-
- tation towards support of portable server applications. It is
- recognized that (for certain systems and mechanisms) creden-
- tials for interactive users may be managed differently from
- credentials for server processes; in such environments, it is
- the GSS-API implementation's responsibility to distinguish these
- cases and the procedures for making this distinction are a lo-
- cal matter. The GSS_Release_cred() call provides a means for
- callers to indicate to the GSS-API that use of a credentials
- structure is no longer required. The GSS_Inquire_cred() call
- allows callers to determine information about a credentials
- structure.
-
- 2.1.1 GSS_Acquire_cred call
-
- Inputs:
-
- o desired_name INTERNAL NAME, -NULL requests locally-determined
- default
-
- o lifetime_req INTEGER,-in seconds; 0 requests default
-
- o desired_mechs SET OF OBJECT IDENTIFIER,-empty set requests
- system-selected default
-
- o cred_usage INTEGER-0=INITIATE-AND-ACCEPT, 1=INITIATE-ONLY,
- 2=ACCEPT-ONLY
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o output_cred_handle OCTET STRING,
-
- o actual_mechs SET OF OBJECT IDENTIFIER,
-
- o lifetime_rec INTEGER -in seconds, or reserved value for
- INDEFINITE
-
- Document Expiration: 31 May 1993 23
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that requested credentials were suc-
- cessfully established, for the duration indicated in life-
- time_rec, suitable for the usage requested in cred_usage,
- for the set of mech_types indicated in actual_mechs, and that
- those credentials can be referenced for subsequent use with
- the handle returned in output_cred_handle.
-
- o GSS_BAD_MECH indicates that a mech_type unsupported by the
- GSS-API implementation type was requested, causing the cre-
- dential establishment operation to fail.
-
- o GSS_BAD_NAMETYPE indicates that the provided desired_name is
- uninterpretable or of a type unsupported by the supporting
- GSS-API implementation, so no credentials could be estab-
- lished for the accompanying desired_name.
-
- o GSS_BAD_NAME indicates that the provided desired_name is in-
- consistent in terms of internally-incorporated type specifier
- information, so no credentials could be established for the
- accompanying desired_name.
-
- o GSS_FAILURE indicates that credential establishment failed
- for reasons unspecified at the GSS-API level, including lack
- of authorization to establish and use credentials associated
- with the identity named in the input desired_name argument.
-
- GSS_Acquire_cred() is used to acquire credentials so that a
- principal can (as a function of the input cred_usage parameter)
- initiate and/or accept security contexts under the identity
- represented by the desired_name input argument. On successful
- completion, the returned output_cred_handle result provides a
- handle for subsequent references to the acquired credentials.
- Typically, single-user client processes using only default
- credentials for context establishment purposes will have no
- need to invoke this call.
-
-
- 24 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- A caller may provide the value NULL for desired_name, signifying
- a request for credentials corresponding to a default princi-
- pal identity. The procedures used by GSS-API implementations to
- select the appropriate principal identity in response to this
- form of request are local matters. It is possible that multiple
- pre-established credentials may exist for the same principal
- identity (for example, as a result of multiple user login ses-
- sions) when GSS_Acquire_cred() is called; the means used in
- such cases to select a specific credential are local matters[7].
-
- The lifetime_rec result indicates the length of time for which
- the acquired credentials will be valid, as an offset from the
- present. A mechanism may return a reserved value indicating IN-
- DEFINITE if no constraints on credential lifetime are imposed.
- A caller of GSS_Acquire_cred() can request a length of time for
- which acquired credentials are to be valid (lifetime_req argu-
- ment), beginning at the present[8], or can request credentials
- with a default validity interval. Certain mechanisms and im-
- plementations may bind in credential validity period specifiers
- at a point preliminary to invocation of the GSS_Acquire_cred()
- call (e.g., in conjunction with user login procedures). As a
- result, callers requesting non-default values for lifetime_req
- must recognize that such requests cannot always be honored and
- must be prepared to accommodate the use of returned credentials
- with different lifetimes as indicated in lifetime_rec.
-
- The caller of GSS_Acquire_cred() can explicitly specify a set
- of mech_types which are to be accommodated in the returned
- credentials (desired_mechs argument), or can request credentials
- for a system-defined default set of mech_types. Selection of the
- system-specified default set is recommended in the interests of
-
- ___________________
- [7] The input lifetime_req argument to GSS_Acquire_cred() may
- provide useful information for local GSS-API implementations
- to employ in making this disambiguation in a manner which will
- best satisfy a caller's intent.
-
- [8] Requests for postdated credentials are not supported within
- the GSS-API.
-
-
- Document Expiration: 31 May 1993 25
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- application portability. The actual_mechs return value may be
- interrogated by the caller to determine the set of mechanisms
- with which the returned credentials may be used.
-
- 2.1.2 GSS_Release_cred call
-
- Input:
-
- o cred_handle OCTET STRING-NULL specifies default credentials
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the credentials referenced by the
- input cred_handle were released for purposes of subsequent
- access by the caller. The effect on other processes which may
- be authorized shared access to such credentials is a local
- matter.
-
- o GSS_NO_CRED indicates that no release operation was per-
- formed, either because the input cred_handle was invalid or
- because the caller lacks authorization to access the refer-
- enced credentials.
-
- o GSS_FAILURE indicates that the release operation failed for
- reasons unspecified at the GSS-API level.
-
- Provides a means for a caller to explicitly request that cre-
- dentials be released when their use is no longer required. Note
- that system-specific credential management functions are also
- likely to exist, for example to assure that credentials shared
- among processes are properly deleted when all affected processes
- terminate, even if no explicit release requests are issued by
- those processes. Given the fact that multiple callers are not
-
- 26 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- precluded from gaining authorized access to the same creden-
- tials, invocation of GSS_Release_cred() cannot be assumed to
- delete a particular set of credentials on a system-wide basis.
-
- 2.1.3 GSS_Inquire_cred call
-
- Input:
-
- o cred_handle OCTET STRING-NULL specifies default credentials
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o cred_name INTERNAL NAME,
-
- o lifetime_rec INTEGER-in seconds, or reserved value for INDEF-
- INITE
-
- o cred_usage INTEGER,-0=INITIATE-AND-ACCEPT, 1=INITIATE-ONLY,
- 2=ACCEPT-ONLY
-
- o mech_set SET OF OBJECT IDENTIFIER
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the credentials referenced by the
- input cred_handle argument were valid, and that the output
- cred_name, lifetime_rec, and cred_usage values represent,
- respectively, the credentials' associated principal name,
- remaining lifetime, suitable usage modes, and supported
- mechanism types.
-
- o GSS_NO_CRED indicates that no information could be returned
- about the referenced credentials, either because the input
- cred_handle was invalid or because the caller lacks autho-
- rization to access the referenced credentials.
-
- o GSS_FAILURE indicates that the release operation failed for
- reasons unspecified at the GSS-API level.
-
- Document Expiration: 31 May 1993 27
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- The GSS_Inquire_cred() call is defined primarily for the use
- of those callers which make use of default credentials rather
- than acquiring credentials explicitly with GSS_Acquire_cred().
- It enables callers to determine a credential structure's asso-
- ciated principal name, remaining validity period, usability for
- security context initiation and/or acceptance, and supported
- mechanisms.
-
-
- 2.2 Context-level calls
-
- This group of calls is devoted to the establishment and manage-
- ment of security contexts between peers. A context's initiator
- calls GSS_Init_sec_context(), resulting in generation of a to-
- ken which the caller passes to the target. At the target, that
- token is passed to GSS_Accept_sec_context(). Depending on the
- underlying mech_type and specified options, additional token
- exchanges may be performed in the course of context establish-
- ment; such exchanges are accommodated by GSS_CONTINUE_NEEDED
- status returns from GSS_Init_sec_context() and GSS_Accept_sec_
- context(). Either party to an established context may invoke
- GSS_Delete_sec_context() to flush context information when a
- context is no longer required. GSS_Process_context_token() is
- used to process received tokens carrying context-level control
- information. GSS_Context_time() allows a caller to determine
- the length of time for which an established context will remain
- valid.
-
- 2.2.1 GSS_Init_sec_context call
-
- Inputs:
-
- o claimant_cred_handle OCTET STRING, -NULL specifies "use
- default"
-
- o input_context_handle INTEGER, -0 specifies "none assigned
- yet"
-
- o targ_name INTERNAL NAME,
-
- 28 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o mech_type OBJECT IDENTIFIER, -NULL parameter specifies "use
- default"
-
- o deleg_req_flag BOOLEAN,
-
- o mutual_req_flag BOOLEAN,
-
- o replay_det_req_flag BOOLEAN,
-
- o sequence_req_flag BOOLEAN,
-
- o lifetime_req INTEGER,-0 specifies default lifetime
-
- o chan_bindings OCTET STRING,
-
- o input_token OCTET STRING-NULL or token received from target
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o output_context_handle INTEGER,
-
- o mech_type OBJECT IDENTIFIER, -actual mechanism always indi-
- cated, never NULL
-
- o output_token OCTET STRING, -NULL or token to pass to context
- target
-
- o deleg_state BOOLEAN,
-
- o mutual_state BOOLEAN,
-
- o replay_det_state BOOLEAN,
-
- o sequence_state BOOLEAN,
-
- o conf_avail BOOLEAN,
-
- o integ_avail BOOLEAN,
-
- o lifetime_rec INTEGER - in seconds, or reserved value for
- INDEFINITE
-
- Document Expiration: 31 May 1993 29
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- This call may block pending network interactions for those mech_
- types in which an authentication server or other network entity
- must be consulted on behalf of a context initiator in order
- to generate an output_token suitable for presentation to a
- specified target.
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that context-level information was
- successfully initialized, and that the returned output_token
- will provide sufficient information for the target to perform
- per-message processing on the newly-established context.
-
- o GSS_CONTINUE_NEEDED indicates that control information in the
- returned output_token must be sent to the target, and that a
- reply must be received and passed as the input_token argument
- to a continuation call to GSS_Init_sec_context(), before
- per-message processing can be performed in conjunction with
- this context.
-
- o GSS_DEFECTIVE_TOKEN indicates that consistency checks per-
- formed on the input_token failed, preventing further process-
- ing from being performed based on that token.
-
- o GSS_DEFECTIVE_CREDENTIAL indicates that consistency checks
- performed on the credential structure referenced by claimant_
- cred_handle failed, preventing further processing from being
- performed using that credential structure.
-
- o GSS_BAD_SIG indicates that the received input_token con-
- tains an incorrect signature, so context setup cannot be
- accomplished.
-
- o GSS_NO_CRED indicates that no context was established, ei-
- ther because the input cred_handle was invalid, because the
- referenced credentials are valid for context acceptor use
- only, or because the caller lacks authorization to access the
- referenced credentials.
-
- 30 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_CREDENTIALS_EXPIRED indicates that the credentials pro-
- vided through the input claimant_cred_handle argument are no
- longer valid, so context establishment cannot be completed.
-
- o GSS_BAD_BINDINGS indicates that a mismatch between the
- caller-provided chan_bindings and those extracted from the
- input_token was detected, signifying a security-relevant
- event and preventing context establishment. (This result will
- be returned by GSS_Init_sec_context only for contexts where
- mutual_state is TRUE.)
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provided; this major status will
- be returned only for successor calls following GSS_CONTINUE_
- NEEDED status returns.
-
- o GSS_BAD_NAMETYPE indicates that the provided targ_name is
- of a type uninterpretable or unsupported by the supporting
- GSS-API implementation, so context establishment cannot be
- completed.
-
- o GSS_BAD_NAME indicates that the provided targ_name is incon-
- sistent in terms of internally-incorporated type specifier
- information, so context establishment cannot be accomplished.
-
- o GSS_FAILURE indicates that context setup could not be ac-
- complished for reasons unspecified at the GSS-API level, and
- that no interface-defined recovery action is available.
-
- This routine is used by a context initiator, and ordinarily
- emits one (or, for the case of a multi-step exchange, more than
- one) output_token suitable for use by the target within the
- selected mech_type's protocol. Using information in the creden-
- tials structure referenced by claimant_cred_handle, GSS_Init_
- sec_context() initializes the data structures required to es-
- tablish a security context with target targ_name. The claimant_
- cred_handle must correspond to the same valid credentials struc-
- ture on the initial call to GSS_Init_sec_context() and on any
- successor calls resulting from GSS_CONTINUE_NEEDED status re-
- turns; different protocol sequences modeled by the GSS_CONTINUE_
-
- Document Expiration: 31 May 1993 31
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- NEEDED mechanism will require access to credentials at different
- points in the context establishment sequence.
-
- The input_context_handle argument is 0, specifying "not yet as-
- signed", on the first GSS_Init_sec_context() call relating to
- a given context. That call returns an output_context_handle for
- future references to this context. When continuation attempts to
- GSS_Init_sec_context() are needed to perform context establish-
- ment, the previously-returned non-zero handle value is entered
- into the input_context_handle argument and will be echoed in the
- returned output_context_handle argument. On such continuation
- attempts (and only on continuation attempts) the input_token
- value is used, to provide the token returned from the context's
- target.
-
- The chan_bindings argument is used by the caller to provide
- information binding the security context to security-related
- characteristics (e.g., addresses, cryptographic keys) of the
- underlying communications channel. See Section 1.1.6 of this
- document for more discussion of this argument's usage.
-
- The input_token argument contains a message received from the
- target, and is significant only on a call to GSS_Init_sec_
- context() which follows a previous return indicating GSS_
- CONTINUE_NEEDED major_status.
-
- It is the caller's responsibility to establish a communications
- path to the target, and to transmit any returned output_token
- (independent of the accompanying returned major_status value)
- to the target over that path. The output_token can, however, be
- transmitted along with the first application-provided input mes-
- sage to be processed by GSS_Sign() or GSS_Seal() in conjunction
- with a successfully-established context.
-
- The initiator may request various context-level functions
- through input flags: the deleg_req_flag requests delegation
- of access rights, the mutual_req_flag requests mutual authenti-
- cation, the replay_det_req_flag requests that replay detection
- features be applied to messages transferred on the established
-
- 32 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- context, and the sequence_req_flag requests that sequencing
- be enforced. (See Section 1.2.3 for more information on replay
- detection and sequencing features.)
-
- Not all of the optionally-requestable features will be available
- in all underlying mech_types; the corresponding return state
- values (deleg_state, mutual_state, replay_det_state, sequence_
- state) indicate, as a function of mech_type processing capabil-
- ities and initiator-provided input flags, the set of features
- which will be active on the context. These state indicators'
- values are undefined unless the routine's major_status indi-
- cates COMPLETE. Failure to provide the precise set of features
- requested by the caller does not cause context establishment
- to fail; it is the caller's prerogative to delete the context
- if the feature set provided is unsuitable for the caller's use.
- The returned mech_type value indicates the specific mechanism
- employed on the context, and will never indicate the value for
- "default".
-
- The conf_avail return value indicates whether the context sup-
- ports per-message confidentiality services, and so informs the
- caller whether or not a request for encryption through the conf_
- req_flag input to GSS_Seal() can be honored. In similar fash-
- ion, the integ_avail return value indicates whether per-message
- integrity services are available (through either GSS_Sign() or
- GSS_Seal()) on the established context.
-
- The lifetime_req input specifies a desired upper bound for the
- lifetime of the context to be established, with a value of 0
- used to request a default lifetime. The lifetime_rec return
- value indicates the length of time for which the context will
- be valid, expressed as an offset from the present; depending on
- mechanism capabilities, credential lifetimes, and local policy,
- it may not correspond to the value requested in lifetime_req.
- If no constraints on context lifetime are imposed, this may be
- indicated by returning a reserved value representing INDEFI-
- NITE lifetime_req. The values of conf_avail, integ_avail, and
- lifetime_rec are undefined unless the routine's major_status
- indicates COMPLETE.
-
- Document Expiration: 31 May 1993 33
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- If the mutual_state is TRUE, this fact will be reflected within
- the output_token. A call to GSS_Accept_sec_context() at the
- target in conjunction with such a context will return a to-
- ken, to be processed by a continuation call to GSS_Init_sec_
- context(), in order to achieve mutual authentication.
-
- 2.2.2 GSS_Accept_sec_context call
-
- Inputs:
-
- o acceptor_cred_handle OCTET STRING,-NULL specifies "use de-
- fault"
-
- o input_context_handle INTEGER, -0 specifies "not yet assigned"
-
- o chan_bindings OCTET STRING,
-
- o input_token OCTET STRING
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o src_name INTERNAL NAME,
-
- o mech_type OBJECT IDENTIFIER,
-
- o output_context_handle INTEGER,
-
- o deleg_state BOOLEAN,
-
- o mutual_state BOOLEAN,
-
- o replay_det_state BOOLEAN,
-
- o sequence_state BOOLEAN,
-
- o conf_avail BOOLEAN,
-
- o integ_avail BOOLEAN,
-
- o lifetime_rec INTEGER, - in seconds, or reserved value for
- INDEFINITE
-
- 34 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o delegated_cred_handle OCTET STRING,
-
- o output_token OCTET STRING -NULL or token to pass to context
- initiator
-
- This call may block pending network interactions for those
- mech_types in which a directory service or other network entity
- must be consulted on behalf of a context acceptor in order to
- validate a received input_token.
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that context-level data structures
- were successfully initialized, and that per-message process-
- ing can now be performed in conjunction with this context.
-
- o GSS_CONTINUE_NEEDED indicates that control information in the
- returned output_token must be sent to the initiator, and that
- a response must be received and passed as the input_token
- argument to a continuation call to GSS_Accept_sec_context(),
- before per-message processing can be performed in conjunction
- with this context.
-
- o GSS_DEFECTIVE_TOKEN indicates that consistency checks per-
- formed on the input_token failed, preventing further process-
- ing from being performed based on that token.
-
- o GSS_DEFECTIVE_CREDENTIAL indicates that consistency checks
- performed on the credential structure referenced by acceptor_
- cred_handle failed, preventing further processing from being
- performed using that credential structure.
-
- o GSS_BAD_SIG indicates that the received input_token con-
- tains an incorrect signature, so context setup cannot be
- accomplished.
-
- o GSS_DUPLICATE_TOKEN indicates that the signature on the
- received input_token was correct, but that the input_token
- was recognized as a duplicate of an input_token already
- processed. No new context is established.
-
- Document Expiration: 31 May 1993 35
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_OLD_TOKEN indicates that the signature on the received
- input_token was correct, but that the input_token is too old
- to be checked for duplication against previously-processed
- input_tokens. No new context is established.
-
- o GSS_NO_CRED indicates that no context was established, ei-
- ther because the input cred_handle was invalid, because the
- referenced credentials are valid for context initiator use
- only, or because the caller lacks authorization to access the
- referenced credentials.
-
- o GSS_CREDENTIALS_EXPIRED indicates that the credentials pro-
- vided through the input acceptor_cred_handle argument are no
- longer valid, so context establishment cannot be completed.
-
- o GSS_BAD_BINDINGS indicates that a mismatch between the
- caller-provided chan_bindings and those extracted from the
- input_token was detected, signifying a security-relevant
- event and preventing context establishment.
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provided; this major status will
- be returned only for successor calls following GSS_CONTINUE_
- NEEDED status returns.
-
- o GSS_FAILURE indicates that context setup could not be ac-
- complished for reasons unspecified at the GSS-API level, and
- that no interface-defined recovery action is available.
-
- The GSS_Accept_sec_context() routine is used by a context tar-
- get. Using information in the credentials structure referenced
- by the input acceptor_cred_handle, it verifies the incoming in-
- put_token and (following the successful completion of a context
- establishment sequence) returns the authenticated src_name and
- the mech_type used. The acceptor_cred_handle must correspond to
- the same valid credentials structure on the initial call to GSS_
- Accept_sec_context() and on any successor calls resulting from
- GSS_CONTINUE_NEEDED status returns; different protocol sequences
- modeled by the GSS_CONTINUE_NEEDED mechanism will require access
-
- 36 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- to credentials at different points in the context establishment
- sequence.
-
- The input_context_handle argument is 0, specifying "not yet as-
- signed", on the first GSS_Accept_sec_context() call relating to
- a given context. That call returns an output_context_handle for
- future references to this context; when continuation attempts
- to GSS_Accept_sec_context() are needed to perform context es-
- tablishment, that handle value will be entered into the input_
- context_handle argument.
-
- The chan_bindings argument is used by the caller to provide
- information binding the security context to security-related
- characteristics (e.g., addresses, cryptographic keys) of the
- underlying communications channel. See Section 1.1.6 of this
- document for more discussion of this argument's usage.
-
- The returned state results (deleg_state, mutual_state, replay_
- det_state, and sequence_state) reflect the same context state
- values as returned to GSS_Init_sec_context()'s caller at the
- initiator system.
-
- The conf_avail return value indicates whether the context sup-
- ports per-message confidentiality services, and so informs the
- caller whether or not a request for encryption through the conf_
- req_flag input to GSS_Seal() can be honored. In similar fash-
- ion, the integ_avail return value indicates whether per-message
- integrity services are available (through either GSS_Sign() or
- GSS_Seal()) on the established context.
-
- The lifetime_rec return value indicates the length of time for
- which the context will be valid, expressed as an offset from the
- present. The values of deleg_state, mutual_state, replay_det_
- state, sequence_state, conf_avail, integ_avail, and lifetime_rec
- are undefined unless the accompanying major_status indicates
- COMPLETE.
-
-
-
- Document Expiration: 31 May 1993 37
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- The delegated_cred_handle result is significant only when deleg_
- state is TRUE, and provides a means for the target to reference
- the delegated credentials. The output_token result, when non-
- NULL, provides a context-level token to be returned to the
- context initiator to continue a multi-step context establishment
- sequence. As noted with GSS_Init_sec_context(), any returned
- token should be transferred to the context's peer (in this
- case, the context initiator), independent of the value of the
- accompanying returned major_status.
-
- Note: A target must be able to distinguish a context-level in-
- put_token, which is passed to GSS_Accept_sec_context(), from
- the per-message data elements passed to GSS_Verify() or GSS_
- Unseal(). These data elements may arrive in a single applica-
- tion message, and GSS_Accept_sec_context() must be performed
- before per-message processing can be performed successfully.
-
- 2.2.3 GSS_Delete_sec_context call
-
- Input:
-
- o context_handle INTEGER
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o output_context_token OCTET STRING
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the context was recognized, that
- relevant context-specific information was flushed, and that
- the returned output_context_token is ready for transfer to
- the context's peer.
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provide, so no deletion was
- performed.
-
- 38 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_FAILURE indicates that the context is recognized, but
- that the GSS_Delete_sec_context() operation could not be
- performed for reasons unspecified at the GSS-API level.
-
- This call may block pending network interactions for mech_types
- in which active notification must be made to a central server
- when a security context is to be deleted.
-
- This call can be made by either peer in a security context,
- to flush context-specific information and to return an output_
- context_token which can be passed to the context's peer in-
- forming it that the peer's corresponding context information
- can also be flushed. (Once a context is established, the peers
- involved are expected to retain cached credential and context-
- related information until the information's expiration time is
- reached or until a GSS_Delete_sec_context() call is made.) At-
- tempts to perform per-message processing on a deleted context
- will result in error returns.
-
- 2.2.4 GSS_Process_context_token call
-
- Inputs:
-
- o context_handle INTEGER,
-
- o input_context_token OCTET STRING
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the input_context_token was suc-
- cessfully processed in conjunction with the context refer-
- enced by context_handle.
-
- o GSS_DEFECTIVE_TOKEN indicates that consistency checks per-
- formed on the received context_token failed, preventing
- further processing from being performed with that token.
-
- Document Expiration: 31 May 1993 39
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provided.
-
- o GSS_FAILURE indicates that the context is recognized, but
- that the GSS_Process_context_token() operation could not be
- performed for reasons unspecified at the GSS-API level.
-
- This call is used to process context_tokens received from a peer
- once a context has been established, with corresponding impact
- on context-level state information. One use for this facility is
- processing of the context_tokens generated by GSS_Delete_sec_
- context(); GSS_Process_context_token() will not block pending
- network interactions for that purpose. Another use is to process
- tokens indicating remote-peer context establishment failures
- after the point where the local GSS-API implementation has
- already indicated GSS_COMPLETE status.
-
- 2.2.5 GSS_Context_time call
-
- Input:
-
- o context_handle INTEGER,
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o lifetime_rec INTEGER - in seconds, or reserved value for
- INDEFINITE
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the referenced context is valid,
- and will remain valid for the amount of time indicated in
- lifetime_rec.
-
- o GSS_CONTEXT_EXPIRED indicates that data items related to the
- referenced context have expired.
-
- 40 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_CREDENTIALS_EXPIRED indicates that the context is recog-
- nized, but that its associated credentials have expired.
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provided.
-
- o GSS_FAILURE indicates that the requested operation failed for
- reasons unspecified at the GSS-API level.
-
- This call is used to determine the amount of time for which a
- currently established context will remain valid.
-
- 2.3 Per-message calls
-
- This group of calls is used to perform per-message protection
- processing on an established security context. None of these
- calls block pending network interactions. These calls may be
- invoked by a context's initiator or by the context's target.
- The four members of this group should be considered as two
- pairs; the output from GSS_Sign() is properly input to GSS_
- Verify(), and the output from GSS_Seal() is properly input to
- GSS_Unseal().
-
- GSS_Sign() and GSS_Verify() support data origin authentication
- and data integrity services. When GSS_Sign() is invoked on
- an input message, it yields a per-message token containing
- data items which allow underlying mechanisms to provide the
- specified security services. The original message, along with
- the generated per-message token, is passed to the remote peer;
- these two data elements are processed by GSS_Verify(), which
- validates the message in conjunction with the separate token.
-
- GSS_Seal() and GSS_Unseal() support caller-requested confiden-
- tiality in addition to the data origin authentication and data
- integrity services offered by GSS_Sign() and GSS_Verify(). GSS_
- Seal() outputs a single data element, encapsulating optionally-
- enciphered user data as well as associated token data items.
- The data element output from GSS_Seal() is passed to the remote
- peer and processed by GSS_Unseal() at that system. GSS_Unseal()
-
- Document Expiration: 31 May 1993 41
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- combines decipherment (as required) with validation of data
- items related to authentication and integrity.
-
- 2.3.1 GSS_Sign call
-
- Inputs:
-
- o context_handle INTEGER,
-
- o qop_req INTEGER,-0 specifies default QOP
-
- o message OCTET STRING
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o per_msg_token OCTET STRING
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that a signature, suitable for an
- established security context, was successfully applied and
- that the message and corresponding per_msg_token are ready
- for transmission.
-
- o GSS_CONTEXT_EXPIRED indicates that context-related data
- items have expired, so that the requested operation cannot be
- performed.
-
- o GSS_CREDENTIALS_EXPIRED indicates that the context is recog-
- nized, but that its associated credentials have expired, so
- that the requested operation cannot be performed.
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provided.
-
- o GSS_FAILURE indicates that the context is recognized, but
- that the requested operation could not be performed for
- reasons unspecified at the GSS-API level.
-
- 42 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- Using the security context referenced by context_handle, apply
- a signature to the input message (along with timestamps and/or
- other data included in support of mech_type-specific mechanisms)
- and return the result in per_msg_token. The qop_req parameter
- allows quality-of-protection control. The caller passes the
- message and the per_msg_token to the target.
-
- The GSS_Sign() function completes before the message and per_
- msg_token is sent to the peer; successful application of GSS_
- Sign() does not guarantee that a corresponding GSS_Verify() has
- been (or can necessarily be) performed successfully when the
- message arrives at the destination.
-
- 2.3.2 GSS_Verify call
-
- Inputs:
-
- o context_handle INTEGER,
-
- o message OCTET STRING,
-
- o per_msg_token OCTET STRING
-
- Outputs:
-
- o qop_state INTEGER,
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the message was successfully
- verified.
-
- o GSS_DEFECTIVE_TOKEN indicates that consistency checks per-
- formed on the received per_msg_token failed, preventing
- further processing from being performed with that token.
-
- o GSS_BAD_SIG indicates that the received per_msg_token con-
- tains an incorrect signature for the message.
-
- Document Expiration: 31 May 1993 43
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_DUPLICATE_TOKEN, GSS_OLD_TOKEN, and GSS_UNSEQ_TOKEN
- values appear in conjunction with the optional per-message
- replay detection features described in Section 1.2.3; their
- semantics are described in that section.
-
- o GSS_CONTEXT_EXPIRED indicates that context-related data
- items have expired, so that the requested operation cannot be
- performed.
-
- o GSS_CREDENTIALS_EXPIRED indicates that the context is recog-
- nized, but that its associated credentials have expired, so
- that the requested operation cannot be performed.
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provided.
-
- o GSS_FAILURE indicates that the context is recognized, but
- that the GSS_Verify() operation could not be performed for
- reasons unspecified at the GSS-API level.
-
- Using the security context referenced by context_handle, verify
- that the input per_msg_token contains an appropriate signature
- for the input message, and apply any active replay detection
- or sequencing features. Return an indication of the quality-
- of-protection applied to the processed message in the qop_state
- result.
-
- 2.3.3 GSS_Seal call
-
- Inputs:
-
- o context_handle INTEGER,
-
- o conf_req_flag BOOLEAN,
-
- o qop_req INTEGER,-0 specifies default QOP
-
- o input_message OCTET STRING
-
- Outputs:
-
- o major_status INTEGER,
-
- 44 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o minor_status INTEGER,
-
- o conf_state BOOLEAN,
-
- o output_message OCTET STRING
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the input_message was success-
- fully processed and that the output_message is ready for
- transmission.
-
- o GSS_CONTEXT_EXPIRED indicates that context-related data
- items have expired, so that the requested operation cannot be
- performed.
-
- o GSS_CREDENTIALS_EXPIRED indicates that the context is recog-
- nized, but that its associated credentials have expired, so
- that the requested operation cannot be performed.
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provided.
-
- o GSS_FAILURE indicates that the context is recognized, but
- that the GSS_Seal() operation could not be performed for
- reasons unspecified at the GSS-API level.
-
- Performs the data origin authentication and data integrity
- functions of GSS_Sign(). If the input conf_req_flag is TRUE,
- requests that confidentiality be applied to the input_message.
- Confidentiality may not be supported in all mech_types or by all
- implementations; the returned conf_state flag indicates whether
- confidentiality was provided for the input_message. The qop_req
- parameter allows quality-of-protection control.
-
- In all cases, the GSS_Seal() call yields a single output_
- message data element containing (optionally enciphered) user
- data as well as control information.
-
- Document Expiration: 31 May 1993 45
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 2.3.4 GSS_Unseal call
-
- Inputs:
-
- o context_handle INTEGER,
-
- o input_message OCTET STRING
-
- Outputs:
-
- o conf_state BOOLEAN,
-
- o qop_state INTEGER,
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o output_message OCTET STRING
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the input_message was success-
- fully processed and that the resulting output_message is
- available.
-
- o GSS_DEFECTIVE_TOKEN indicates that consistency checks per-
- formed on the per_msg_token extracted from the input_message
- failed, preventing further processing from being performed.
-
- o GSS_BAD_SIG indicates that an incorrect signature was de-
- tected for the message.
-
- o GSS_DUPLICATE_TOKEN, GSS_OLD_TOKEN, and GSS_UNSEQ_TOKEN
- values appear in conjunction with the optional per-message
- replay detection features described in Section 1.2.3; their
- semantics are described in that section.
-
- o GSS_CONTEXT_EXPIRED indicates that context-related data
- items have expired, so that the requested operation cannot be
- performed.
-
- o GSS_CREDENTIALS_EXPIRED indicates that the context is recog-
- nized, but that its associated credentials have expired, so
- that the requested operation cannot be performed.
-
- 46 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_NO_CONTEXT indicates that no valid context was recognized
- for the input context_handle provided.
-
- o GSS_FAILURE indicates that the context is recognized, but
- that the GSS_Unseal() operation could not be performed for
- reasons unspecified at the GSS-API level.
-
- Processes a data element generated (and optionally enciphered)
- by GSS_Seal(), provided as input_message. The returned conf_
- state value indicates whether confidentiality was applied to the
- input_message. If conf_state is TRUE, GSS_Unseal() deciphers
- the input_message. Returns an indication of the quality-of-
- protection applied to the processed message in the qop_state
- result. GSS_Seal() performs the data integrity and data ori-
- gin authentication checking functions of GSS_Verify() on the
- plaintext data. Plaintext data is returned in output_message.
-
- 2.4 Support calls
-
- This group of calls provides support functions useful to GSS-API
- callers, independent of the state of established contexts. Their
- characterization with regard to blocking or non-blocking status
- in terms of network interactions is unspecified.
-
- 2.4.1 GSS_Display_status call
-
- Inputs:
-
- o status_value INTEGER,-GSS-API major_status or minor_status
- return value
-
- o status_type INTEGER,-1 if major_status, 2 if minor_status
-
- o mech_type OBJECT IDENTIFIER-mech_type to be used for minor_
- status translation
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- Document Expiration: 31 May 1993 47
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o status_string_set SET OF OCTET STRING
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that a valid printable status repre-
- sentation (possibly representing more than one status event
- encoded within the status_value) is available in the returned
- status_string_set.
-
- o GSS_BAD_MECH indicates that translation in accordance with an
- unsupported mech_type was requested, so translation could not
- be performed.
-
- o GSS_BAD_STATUS indicates that the input status_value was
- invalid, or that the input status_type carried a value other
- than 1 or 2, so translation could not be performed.
-
- o GSS_FAILURE indicates that the requested operation could not
- be performed for reasons unspecified at the GSS-API level.
-
- Provides a means for callers to translate GSS-API-returned major
- and minor status codes into printable string representations.
-
- 2.4.2 GSS_Indicate_mechs call
-
- Input:
-
- o (none)
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o mech_set SET OF OBJECT IDENTIFIER
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that a set of available mechanisms has
- been returned in mech_set.
-
- 48 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_FAILURE indicates that the requested operation could not
- be performed for reasons unspecified at the GSS-API level.
-
- Allows callers to determine the set of mechanism types avail-
- able on the local system. This call is intended for support of
- specialized callers who need to request non-default mech_type
- sets from GSS_Acquire_cred(), and should not be needed by other
- callers.
-
- 2.4.3 GSS_Compare_name call
-
- Inputs:
-
- o name1 INTERNAL NAME,
-
- o name2 INTERNAL NAME
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o name_equal BOOLEAN
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that name1 and name2 were comparable,
- and that the name_equal result indicates whether name1 and
- name2 were equal or unequal.
-
- o GSS_BAD_NAMETYPE indicates that one or both of name1 and
- name2 contained internal type specifiers uninterpretable
- by the supporting GSS-API implementation, or that the two
- names' types are different and incomparable, so the equality
- comparison could not be completed.
-
- o GSS_BAD_NAME indicates that one or both of the input names
- was ill-formed in terms of its internal type specifier, so
- the equality comparison could not be completed.
-
- Document Expiration: 31 May 1993 49
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_FAILURE indicates that the requested operation could not
- be performed for reasons unspecified at the GSS-API level.
-
- Allows callers to compare two internal name representations for
- equality.
-
- 2.4.4 GSS_Display_name call
-
- Inputs:
-
- o name INTERNAL NAME
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o name_string OCTET STRING,
-
- o name_type OBJECT IDENTIFIER
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that a valid printable name represen-
- tation is available in the returned name_string.
-
- o GSS_BAD_NAMETYPE indicates that the provided name was of a
- type uninterpretable by the supporting GSS-API implementa-
- tion, so no printable representation could be generated.
-
- o GSS_BAD_NAME indicates that the contents of the provided name
- were inconsistent with the internally-indicated name type, so
- no printable representation could be generated.
-
- o GSS_FAILURE indicates that the requested operation could not
- be performed for reasons unspecified at the GSS-API level.
-
- Allows callers to translate an internal name representation into
- a printable form with associated namespace type descriptor. The
- syntax of the printable form is a local matter.
-
- 50 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 2.4.5 GSS_Import_name call
-
- Inputs:
-
- o input_name_string OCTET STRING,
-
- o input_name_type OBJECT IDENTIFIER
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER,
-
- o output_name INTERNAL NAME
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that a valid name representation is
- output in output_name and described by the type value in
- output_name_type.
-
- o GSS_BAD_NAMETYPE indicates that the input_name_type is unsup-
- ported by the GSS-API implementation, so the import operation
- could not be completed.
-
- o GSS_BAD_NAME indicates that the provided input_name_string
- is ill-formed in terms of the input_name_type, so the import
- operation could not be completed.
-
- o GSS_FAILURE indicates that the requested operation could not
- be performed for reasons unspecified at the GSS-API level.
-
- Allows callers to provide a printable name representation,
- designate the type of namespace in conjunction with which it
- should be parsed, and convert that printable representation to
- an internal form suitable for input to other GSS-API routines.
- The syntax of the input_name is a local matter.
-
- Document Expiration: 31 May 1993 51
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 2.4.6 GSS_Release_name call
-
- Inputs:
-
- o name INTERNAL NAME
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the storage associated with the
- input name was successfully released.
-
- o GSS_BAD_NAME indicates that the input name argument did not
- contain a valid name.
-
- o GSS_FAILURE indicates that the requested operation could not
- be performed for reasons unspecified at the GSS-API level.
-
- Allows callers to release the storage associated with an inter-
- nal name representation.
-
- 2.4.7 GSS_Release_buffer call
-
- Inputs:
-
- o buffer OCTET STRING
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the storage associated with the
- input buffer was successfully released.
-
- 52 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- o GSS_FAILURE indicates that the requested operation could not
- be performed for reasons unspecified at the GSS-API level.
-
- Allows callers to release the storage associated with an OCTET
- STRING buffer allocated by another GSS-API call.
-
- 2.4.8 GSS_Release_oid_set call
-
- Inputs:
-
- o buffer SET OF OBJECT IDENTIFIER
-
- Outputs:
-
- o major_status INTEGER,
-
- o minor_status INTEGER
-
- Return major_status codes:
-
- o GSS_COMPLETE indicates that the storage associated with the
- input object identifier set was successfully released.
-
- o GSS_FAILURE indicates that the requested operation could not
- be performed for reasons unspecified at the GSS-API level.
-
- Allows callers to release the storage associated with an object
- identifier set object allocated by another GSS-API call.
-
- 3 Mechanism-Specific Example Scenarios
-
- This section provides illustrative overviews of the use of var-
- ious candidate mechanism types to support the GSS-API. These
- discussions are intended primarily for readers familiar with
- specific security technologies, demonstrating how GSS-API
- functions can be used and implemented by candidate underly-
- ing mechanisms. They should not be regarded as constrictive
- to implementations or as defining the only means through which
- GSS-API functions can be realized with a particular underlying
- technology, and do not demonstrate all GSS-API features with
- each technology.
-
- Document Expiration: 31 May 1993 53
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 3.1 Kerberos V5, single-TGT
-
- OS-specific login functions yield a TGT to the local realm Ker-
- beros server; TGT is placed in a credentials structure for the
- client. Client calls GSS_Acquire_cred() to acquire a cred_
- handle in order to reference the credentials for use in estab-
- lishing security contexts.
-
- Client calls GSS_Init_sec_context(). If the requested service
- is located in a different realm, GSS_Init_sec_context() gets
- the necessary TGT/key pairs needed to traverse the path from
- local to target realm; these data are placed in the owner's TGT
- cache. After any needed remote realm resolution, GSS_Init_sec_
- context() yields a service ticket to the requested service with
- a corresponding session key; these data are stored in conjunc-
- tion with the context. GSS-API code sends KRB_TGS_REQ request(s)
- and receives KRB_TGS_REP response(s) (in the successful case) or
- KRB_ERROR.
-
- Assuming success, GSS_Init_sec_context() builds a Kerberos-
- formatted KRB_AP_REQ message, and returns it in output_token.
- The client sends the output_token to the service.
-
- The service passes the received token as the input_token argu-
- ment to GSS_Accept_sec_context(), which verifies the authen-
- ticator, provides the service with the client's authenticated
- name, and returns an output_context_handle.
-
- Both parties now hold the session key associated with the ser-
- vice ticket, and can use this key in subsequent GSS_Sign(),
- GSS_Verify(), GSS_Seal(), and GSS_Unseal() operations.
-
-
-
-
-
-
-
-
- 54 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- 3.2 Kerberos V5, double-TGT
-
- TGT acquisition as above.
-
- Note: To avoid unnecessary frequent invocations of error paths
- when implementing the GSS-API atop Kerberos V5, it seems appro-
- priate to represent "single-TGT K-V5" and "double-TGT K-V5" with
- separate mech_types, and this discussion makes that assumption.
-
- Based on the (specified or defaulted) mech_type, GSS_Init_
- sec_context() determines that the double-TGT protocol should
- be employed for the specified target. GSS_Init_sec_context()
- returns GSS_CONTINUE_NEEDED major_status[9], and its returned
- output_token contains a request to the service for the service's
- TGT. (If a service TGT with suitably long remaining lifetime
- already exists in a cache, it may be usable, obviating the
- need for this step.) The client passes the output_token to the
- service.
-
- The service passes the received token as the input_token ar-
- gument to GSS_Accept_sec_context(), which recognizes it as
- a request for TGT. (Note that current Kerberos V5 defines no
- intra-protocol mechanism to represent such a request.) GSS_
- Accept_sec_context() returns GSS_CONTINUE_NEEDED major_status
- and provides the service's TGT in its output_token. The service
- sends the output_token to the client.
-
- The client passes the received token as the input_token argument
- to a continuation of GSS_Init_sec_context(). GSS_Init_sec_
- context() caches the received service TGT and uses it as part
- of a service ticket request to the Kerberos authentication
- server, storing the returned service ticket and session key
- in conjunction with the context. GSS_Init_sec_context() builds
-
- ___________________
- [9] This scenario illustrates a different use for the GSS_
- CONTINUE_NEEDED status return facility than for support of
- mutual authentication; note that both uses can coexist as
- successive operations within a single context establishment
-
- operation.
-
- Document Expiration: 31 May 1993 55
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- a Kerberos-formatted authenticator, and returns it in output_
- token along with GSS_COMPLETE return major_status. The client
- sends the output_token to the service.
-
- Service passes the received token as the input_token argument
- to a continuation call to GSS_Accept_sec_context(). GSS_Accept_
- sec_context() verifies the authenticator, provides the service
- with the client's authenticated name, and returns major_status
- GSS_COMPLETE.
-
- GSS_Sign(), GSS_Verify(), GSS_Seal(), and GSS_Unseal() as
- above.
-
- 3.3 X.509 Authentication Framework
-
- This example illustrates use of the GSS-API in conjunction
- with public-key mechanisms, consistent with the X.509 Directory
- Authentication Framework.
-
- The GSS_Acquire_cred() call establishes a credentials struc-
- ture, making the client's private key accessible for use on
- behalf of the client.
-
- The client calls GSS_Init_sec_context(), which interrogates
- the Directory to acquire (and validate) a chain of public-key
- certificates, thereby collecting the public key of the service.
- The certificate validation operation determines that suitable
- signatures were applied by trusted authorities and that those
- certificates have not expired. GSS_Init_sec_context() generates
- a secret key for use in per-message protection operations on
- the context, and enciphers that secret key under the service's
- public key.
-
- The enciphered secret key, along with an authenticator quantity
- signed with the client's private key, is included in the out-
- put_token from GSS_Init_sec_context(). The output_token also
- carries a certification path, consisting of a certificate chain
- leading from the service to the client; a variant approach would
-
- 56 Document Expiration: 31 May 1993
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- defer this path resolution to be performed by the service in-
- stead of being asserted by the client. The client application
- sends the output_token to the service.
-
- The service passes the received token as the input_token ar-
- gument to GSS_Accept_sec_context(). GSS_Accept_sec_context()
- validates the certification path, and as a result determines a
- certified binding between the client's distinguished name and
- the client's public key. Given that public key, GSS_Accept_sec_
- context() can process the input_token's authenticator quantity
- and verify that the client's private key was used to sign the
- input_token. At this point, the client is authenticated to the
- service. The service uses its private key to decipher the en-
- ciphered secret key provided to it for per-message protection
- operations on the context.
-
- The client calls GSS_Sign() or GSS_Seal() on a data mes-
- sage, which causes per-message authentication, integrity, and
- (optional) confidentiality facilities to be applied to that
- message. The service uses the context's shared secret key to
- perform corresponding GSS_Verify() and GSS_Unseal() calls.
-
- 4 Related Activities
-
- In order to implement the GSS-API atop existing, emerging, and
- future security mechanisms:
-
- o object identifiers must be assigned to candidate GSS-API
- mechanisms and the name types which they support
-
- o concrete data element formats must be defined for candidate
- mechanisms (encapsulation within the mechanism-independent
- token format definition in Appendix B of this document is
- recommended to mechanism designers)
-
- Calling applications must implement formatting conventions which
- will enable them to distinguish GSS-API tokens from other data
- carried in their application protocols.
-
- Document Expiration: 31 May 1993 57
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- Concrete language bindings are required for the programming en-
- vironments in which the GSS-API is to be employed; such bindings
- for the C language are available in an associated Internet-
- Draft.
-
-
- 5 Acknowledgments
-
- This proposal is the result of a collaborative effort. Acknowl-
- edgments are due to the many members of the IETF Security Area
- Advisory Group (SAAG) and the Common Authentication Technology
- (CAT) Working Group for their contributions at meetings and by
- electronic mail. Acknowledgments are also due to Kannan Ala-
- gappan, Doug Barlow, Bill Brown, Cliff Kahn, Charlie Kaufman,
- Butler Lampson, Richard Pitkin, Joe Tardo, and John Wray of
- Digital Equipment Corporation, and John Carr, John Kohl, Jon
- Rochlis, Jeff Schiller, and Ted T'so of MIT and Project Athena.
- Joe Pato and Bill Sommerfeld of HP/Apollo, Walt Tuvell of OSF,
- and Bill Griffith and Mike Merritt of AT&T, provided inputs
- which helped to focus and clarify directions. Precursor work
- by Richard Pitkin, presented to meetings of the Trusted Systems
- Interoperability Group (TSIG), helped to demonstrate the value
- of a generic, mechanism-independent security service API.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 58 Document Expiration: 31 May 1993
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX A
-
-
- PACS AND AUTHORIZATION SERVICES
-
-
- Consideration has been given to modifying the GSS-API service
- interface to recognize and manipulate Privilege Attribute Cer-
- tificates (PACs) as in ECMA 138, carrying authorization data as
- a side effect of establishing a security context, but no such
- modifications have been incorporated at this time. This appendix
- provides rationale for this decision and discusses compatibility
- alternatives between PACs and the GSS-API which do not require
- that PACs be made visible to GSS-API callers.
-
- Existing candidate mechanism types such as Kerberos and X.509
- do not incorporate PAC manipulation features, and exclusion of
- such mechanisms from the set of candidates equipped to fully
- support the GSS-API seems inappropriate. Inclusion (and GSS-
- API visibility) of a feature supported by only a limited number
- of mechanisms could encourage the development of ostensibly
- portable applications which would in fact have only limited
- portability.
-
- The status quo, in which PACs are not visible across the GSS-API
- interface, does not preclude implementations in which PACs are
- carried transparently, within the tokens defined and used for
- certain mech_types, and stored within peers' credentials and
- context-level data structures. While invisible to API callers,
- such PACs could be used by operating system or other local
- functions as inputs in the course of mediating access requests
- made by callers. This course of action allows dynamic selection
- of PAC contents, if such selection is administratively-directed
- rather than caller-directed.
-
- PACs and Authorization Services 59
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- In a distributed computing environment, authentication must
- span different systems; the need for such authentication pro-
- vides motivation for GSS-API definition and usage. Heterogeneous
- systems in a network can intercommunicate, with globally au-
- thenticated names comprising the common bond between locally
- defined access control policies. Access control policies to
- which authentication provides inputs are often local, or spe-
- cific to particular operating systems or environments. If the
- GSS-API made particular authorization models visible across its
- service interface, its scope of application would become less
- general. The current GSS-API paradigm is consistent with the
- precedent set by Kerberos, neither defining the interpretation
- of authorization-related data nor enforcing access controls
- based on such data.
-
- The GSS-API is a general interface, whose callers may reside
- inside or outside any defined TCB or NTCB boundaries. Given this
- characteristic, it appears more realistic to provide facilities
- which provide "value-added" security services to its callers
- than to offer facilities which enforce restrictions on those
- callers. Authorization decisions must often be mediated below
- the GSS-API level in a local manner against (or in spite of)
- applications, and cannot be selectively invoked or omitted
- at those applications' discretion. Given that the GSS-API's
- placement prevents it from providing a comprehensive solution
- to the authorization issue, the value of a partial contribution
- specific to particular authorization models is debatable.
-
-
-
-
-
-
-
-
-
-
-
-
- 60 PACs and Authorization Services
-
-
-
-
-
-
-
-
-
-
-
-
- APPENDIX B
-
-
- MECHANISM-INDEPENDENT TOKEN FORMAT
-
-
- This appendix specifies a mechanism-independent level of en-
- capsulating representation for the initial token of a GSS-API
- context establishment sequence, incorporating an identifier
- of the mechanism type to be used on that context. Use of this
- format (with ASN.1-encoded data elements represented in BER,
- constrained in the interests of parsing simplicity to the Dis-
- tinguished Encoding Rule (DER) BER subset defined in X.509,
- clause 8.7) is recommended to the designers of GSS-API imple-
- mentations based on various mechanisms, so that tokens can be
- interpreted unambiguously at GSS-API peers. There is no require-
- ment that the mechanism-specific innerContextToken, innerMs-
- gToken, and sealedUserData data elements be encoded in ASN.1
- BER.
-
- -- optional top-level token definitions to
- -- frame different mechanisms
-
- GSS-API DEFINITIONS ::=
-
- BEGIN
-
- MechType ::= OBJECT IDENTIFIER
- -- data structure definitions
-
- -- callers must be able to distinguish among
- -- InitialContextToken, SubsequentContextToken,
- -- PerMsgToken, and SealedMessage data elements
- -- based on the usage in which they occur
-
- Mechanism-Independent Token Format 61
-
-
-
-
- Generic Security Service API: Internet-Draft: November 1992
- Common Authentication Technology WG: John Linn (DEC)
-
-
- InitialContextToken ::=
- -- option indication (delegation, etc.) indicated within
- -- mechanism-specific token
- [APPLICATION 0] IMPLICIT SEQUENCE {
- thisMech MechType,
- innerContextToken ANY DEFINED BY thisMech
- -- contents mechanism-specific
- }
-
- SubsequentContextToken ::= innerContextToken ANY
- -- interpretation based on predecessor InitialContextToken
-
- PerMsgToken ::=
- -- as emitted by GSS_Sign and processed by GSS_Verify
- innerMsgToken ANY
-
- SealedMessage ::=
- -- as emitted by GSS_Seal and processed by GSS_Unseal
- -- includes internal, mechanism-defined indicator
- -- of whether or not encrypted
- sealedUserData ANY
-
- END
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- 62 Mechanism-Independent Token Format
-